<?xml version="1.0" encoding="utf-8" ?>
<!-- The solution node contains the overall settings and results
     as well as all the projects' settings and results. Presently
     HarnessIt only supports a single project, this node is here
     for future compatibility.
     
     The schemaVersion represents the file format version.
 -->
<solution name="HarnessIt Tests" schemaVersion="1">
  <!-- The executionSettings node stores information about the 
       machine where the tests were run, the user who ran the tests
       as well as other settings.
   -->
  <executionSettings>
    <machine name="MyComputer's Name" ip="192.168.0.153" />
    <user name="MrUser" />
    <dateTime date="5/14/2003" time="9:03 AM" />
    <version HarnessItVersion="1.3.0.0" />
  </executionSettings>
  <!-- The statistics node is a recurring node throughoutfs the document.
       At each level it holds the test result statistics for that level
       and below.
       
       Here it stores the results for the entire solution.
  -->
  <statistics>
    <passed>1</passed>
    <failed>2</failed>
    <total>3</total>
    <runningTime>0.030605</runningTime>
  </statistics>
  <!-- The projects stores all the project level results and settings. -->
  <projects count="1">
    <!-- Each project's settings and results are grouped in a project node. -->
    <project name="HarnessIt Tests">
      <!-- file is the path to the HarnessIt project file. -->
      <file>C:\UnitTests\HarnessIt Tests.htp</file>
      <!-- The executionEngine node contains the name and settings for the
           test execution engine that was used to run this project's tests.
           
           The local engine has no settings, but the other engines generally do.
           For example, the web engine stores the URL to the web context service here.
       -->
      <executionEngine>
        <name>HarnessIt Local Test Engine</name>
        <settings />
      </executionEngine>
      <!-- The statistics node is a recurring node throughout the document.
           At each level it holds the test result statistics for that level
           and below.

           Here it stores the results for this project.
      -->
      <statistics>
        <passed>1</passed>
        <failed>2</failed>
        <total>3</total>
        <runningTime>0.030605</runningTime>
      </statistics>
      <!-- Results are grouped by assembly within the project's results. -->
      <assemblies count="2">
        <!-- Each assembly's results are located within an assembly node.
          
             The hasRun attribute indicates whether any tests have been executed
             in that assembly. The values are True or False. If False, 
             the only node inside the assembly node will be the description node.
        -->
        <assembly name="FirstAssemblyName" hasRun="True">
          <!-- The description set with the TestAssembly attribute [HTML encoded]. -->
          <description>Description for FirstAssemblyName, set with TestAssembly attribute.</description>
          <!-- The statistics node is a recurring node throughout the document.
               At each level it holds the test result statistics for that level
               and below.

               Here it stores the results for this assembly.
          -->
          <statistics>
            <passed>1</passed>
            <failed>2</failed>
            <total>3</total>
            <runningTime>0.030605</runningTime>
          </statistics>
          <!-- Results for each assembly are further classified by class in the classes node. -->
          <classes count="3">
            <!-- Each class's results are located within a class node.
          
                 The hasRun attribute indicates whether any tests have been executed
                 in that assembly. The values are True or False. If False, 
                 the only node inside the class node will be the description node.
            -->
            <class name="FirstClass" hasRun="True">
              <!-- The description set with the TestClass attribute [HTML encoded]. -->
              <description>FirstClass description, set with TestClass attribute.</description>
              <!-- The statistics node is a recurring node throughout the document.
                   At each level it holds the test result statistics for that level
                   and below.

                   Here it stores the results for this class.
              -->
              <statistics>
                <passed>1</passed>
                <failed>1</failed>
                <total>2</total>
                <runningTime>0.0200144</runningTime>
              </statistics>
              <testMethods count="2">
                <!-- Each test methods's results are located within an testMethod node.
          
                     The hasRun attribute indicates whether any tests have been executed
                     in that assembly. The values are True or False. If False, 
                     the only node inside the assembly node will be the description node.
                -->
                <testMethod name="FirsttestMethod" hasRun="True">
                  <!-- The description given in the overloaded testMethod attribute [HTML encoded].-->
                  <description>FirsttestMethod description, set with overloaded testMethod attribute.</description>
                  <!-- The statistics node is a recurring node throughout the document.
                       At each level it holds the test result statistics for that level
                       and below.

                       Here it stores the results for this test method.
                   -->
                  <statistics>
                    <passed>1</passed>
                    <failed>0</failed>
                    <total>1</total>
                    <runningTime>0.0100144</runningTime>
                  </statistics>
                  <!-- The tests node stores the test results set with 
                       testMethodRecord.RunTest. 
                       
                       The order value is the overall order of the test within
                       the tests and comments. For example, below we have the comment
                       was called first with testMethodRecord.WriteLine, then the
                       test was run afterwards.
                       
                       The order on the trace messages is only in regard to the other
                       trace messages.
                  -->
                  <tests count="1">
                    <!-- Each test is stored in a test node. The inner text is HTML encoded.-->
                    <test order="2" result="Passed">First test, follows comment.</test>
                  </tests>
                  <!-- Messages written with testMethodRecord.WriteLine. 
                       See previous comment for details.
                  -->
                  <comments count="1">
                    <!-- Each comment is stored in a comment node. The inner text is HTML encoded.-->
                    <comment order="1">First comment (testMethodRecord.WriteLine) precedes test.</comment>
                  </comments>
                  <!-- System.Diagnostics.Trace and System.Diagnostics.Debug messages
                       received during execution of this test method.
                       See previous tests comment for details.
                  -->
                  <traces count="1">
                    <!-- Each trace message is stored in a trace node. The inner text is HTML encoded.-->
                    <trace order="1">A trace message captured during execution of FirsttestMethod.</trace>
                  </traces>
                </testMethod>
                <testMethod name="SecondtestMethod" hasRun="True">
                  <description>SecondtestMethod description, set with overloaded testMethod attribute.</description>
                  <statistics>
                    <passed>0</passed>
                    <failed>1</failed>
                    <total>1</total>
                    <runningTime>0.010000</runningTime>
                  </statistics>
                  <tests count="1">
                    <test order="2" result="Failed">This test failed.</test>
                  </tests>
                  <comments count="1">
                    <comment order="1">First comment (testMethodRecord.WriteLine) precedes test.</comment>
                  </comments>
                  <traces count="1">
                    <trace order="1">A trace message captured during execution of SecondtestMethod.</trace>
                  </traces>
                </testMethod>
              </testMethods>
            </class>
            <class name="SecondClass" hasRun="True">
              <description>SecondClass description, set with TestClass attribute.</description>
              <statistics>
                <passed>0</passed>
                <failed>1</failed>
                <total>1</total>
                <runningTime>0.0105904</runningTime>
              </statistics>
              <testMethods count="1">
                <testMethod name="ThirdtestMethod" hasRun="True">
                  <description>Throw an unhandled exception, should fail.</description>
                  <statistics>
                    <passed>0</passed>
                    <failed>1</failed>
                    <total>1</total>
                    <runningTime>0.0105904</runningTime>
                  </statistics>
                  <tests count="1">
                    <test order="1" result="Failed">UNHANDLED EXCEPTION CAUGHT: [System.Exception] Outer exception message. --&gt; [System.ArgumentNullException] Inner exception message.
View exception details: http://ExceptionExplorer/FirstAssemblyName/SecondClass/ThirdtestMethod</test>
                  </tests>
                  <comments count="0" />
                  <traces count="0" />
                  <!-- When exceptions occur, they are reported in the following block.
                       The order refers to the order relative to the tests and comments.
                       Due to the nature of exceptions, they will always appear last.
                  -->
                  <exceptionOccurred order="2">
                    <!-- If the exception has been registered, information about that
                         will be recorded here. Otherwise, it will simply indicate that
                         the exception was not expected. That is only
                         <expected>False</expected> will appear inside the registered node
                         if the exception was not registered.
                     -->
                    <registered>
                      <expected>True</expected>
                      <!-- The message passed to testMethodRecord.RegisterException.  [HTML encoded] -->
                      <message>Expected exception thrown</message>
                      <!-- Indicates if the exception is consistent with the registered type. -->
                      <consistent>True</consistent>
                      <!-- The type of exception that was registered. -->
                      <expectedType>System.Exception</expectedType>
                    </registered>
                    <!-- Details about the actual exception that was caught.
                         This can be recursive. That is, it can have child nodes of
                         exception nodes which store the inner exception information
                         as is the case with this example.
                     -->
                    <exception type="System.Exception" source="TestingTestClasses">
					  <thread threadID="0x00323F">
					     <name>Test Execution Thread</name>
                      </thread>
                      <!-- The message of the exception. -->
                      <message>Outer exception message.</message>
                      <!-- The parsed stack trace. Here you can access 
                      
                           * The method where the exception occurred
                           * The class in which it occurred
                           * The line number and file name of the file where it occurred IF 
                             that information is available (only in debug builds)
                           * The namespace containing the class. 
                      
                           The order is the same order as you'd read it from the ToString 
                           output of the exception object. That is, the call stack starting
                           closest to the point of the exception occurring to the point where
                           it was caught.
                      -->
                      <stackTrace>
                        <entry order="1" method="ThirdtestMethod(testMethodRecord tmr) " class="SecondClass" line="41" file="C:\UnitTests\FirstAssemblyName\SecondClass.cs" namespace="UnitTests.FirstAssemblyName.SecondClass" />
                      </stackTrace>
                      <!-- The resulting string of calling ToString on the exception [HTML encoded] -->
                      <toString>System.Exception: Outer exception message. ---&gt; System.ArgumentNullException: Inner exception message.
   --- End of inner exception stack trace ---
   at UnitTests.FirstAssemblyName.SecondClass.ThirdtestMethod(testMethodRecord tmr) in C:\UnitTests\FirstAssemblyName\SecondClass.cs:line 41</toString>
                      <!-- The inner exception information, same format as the outer exception. -->
                      <exception type="System.ArgumentNullException" source="null">
                        <thread threadID="0x00323F">
					       <name>Test Execution Thread</name>
                        </thread>
                        <message>Inner exception message.</message>
                        <stackTrace />
                        <toString>System.ArgumentNullException: Inner exception message.</toString>
                      </exception>
                    </exception>
                  </exceptionOccurred>
                </testMethod>
              </testMethods>
            </class>
            <!-- ThirdTestClass has not run any tests and will only have the description node.  -->
            <class name="ThirdTestClass" hasRun="False">
              <description>Description of FourthtestMethod.</description>
            </class>
          </classes>
        </assembly>
        <!-- SecondAssembly is an assembly which has not run any tests and will only have the description node. -->
        <assembly name="SecondAssembly" hasRun="False">
          <!-- No description was given for this assembly. -->
          <description />
        </assembly>
      </assemblies>
    </project>
  </projects>
</solution>